package com.neuedu.utils;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 项目：mblog_java4
 * 创建时间：  2021-12-28   12:18
 * 作者 :jshand
 * 描述 : Freemarker工具类
 */
public class FtlUtils {

    /**
     * @param ftlName "temp.ftl"
     * @throws IOException
     */
    public static void generator(String ftlName, Object dataModel, String destFile) throws IOException, TemplateException {

        Map data = new HashMap<>();

        // 第一步：创建一个Configuration对象，直接new一个对象。构造方法的参数就是FreeMarker对于的版本号。
        Configuration configuration = new Configuration(Configuration.getVersion());

        // 第二步：设置模板文件所在的路径。
        String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();
        String resource = path;
        configuration.setDirectoryForTemplateLoading(new File(resource));

        // 第三步：设置模板文件使用的字符集。一般就是utf-8.
        configuration.setDefaultEncoding("utf-8");

        // 第四步：加载一个模板，创建一个模板对象。
        Template template = configuration.getTemplate(ftlName);

        // 第六步：创建一个Writer对象，一般创建一FileWriter对象，指定生成的文件名。
        File file = new File(destFile);
        if (file.exists()) {
            file.delete();
        }

        //如果文件夹不存在创建文件夹
        if (!file.getParentFile().exists()) {
            file.getParentFile().mkdirs();
        }
        Writer out = new FileWriter(new File(destFile));

        // 第七步：调用模板对象的process方法输出文件。
        template.process(dataModel, out);

        // 第八步：关闭流。
        out.close();


    }
}
